/**
 *
 * 自动更桌面应用
 *
 */

const { autoUpdater } = require('electron-updater')
const { ipcMain, app } = require('electron')
let mainWindow = null
// 是否自动更新，如果为true，当可以更新时(update-available)自动执行更新下载。
autoUpdater.autoDownload = true
let canQuit = false
// 研发环境强制使用更新
// Object.defineProperty(app, 'isPackaged', {
//   get() {
//     return true
//   }
// })
export function updateHandle(window, feedUrl) {
  mainWindow = window
  //设置更新包的地址
  if (feedUrl) {
    autoUpdater.setFeedURL(feedUrl)
  }
  //监听升级失败事件
  autoUpdater.on('error', function (error) {
    sendUpdateMessage({
      cmd: 'error',
      message: error
    })
  })

  //监听开始检测更新事件
  autoUpdater.on('checking-for-update', function (message) {
    sendUpdateMessage({
      cmd: 'checking-for-update',
      message: message
    })
  })
  //监听发现可用更新事件
  autoUpdater.on('update-available', function (message) {
    sendUpdateMessage({
      cmd: 'update-available',
      message: message
    })
  })
  //监听没有可用更新事件
  autoUpdater.on('update-not-available', function (message) {
    sendUpdateMessage({
      cmd: 'update-not-available',
      message: message
    })
  })

  // 更新下载进度事件
  autoUpdater.on('download-progress', function (progressObj) {
    sendUpdateMessage({
      cmd: 'download-progress',
      message: progressObj
    })
  })

  autoUpdater.on('close', (event) => {
    if (!canQuit) {
      mainWindow.hide()
      mainWindow.setSkipTaskbar(true)
      event.preventDefault()
    }
  })

  //监听下载完成事件
  autoUpdater.on(
    'update-downloaded',
    function (event, releaseNotes, releaseName, releaseDate, updateUrl) {
      sendUpdateMessage({
        cmd: 'update-downloaded',
        message: {
          releaseNotes,
          releaseName,
          releaseDate,
          updateUrl
        }
      })
      //退出并安装更新包
      canQuit = true
      app.quit()
      autoUpdater.quitAndInstall()
    }
  )
  //接收渲染进程消息，开始检查更新
  ipcMain.on('checkForUpdate', (e, arg) => {
    //执行自动更新检查
    console.warn(arg)
    sendUpdateMessage({ cmd: 'checkForUpdate', message: arg })
    if (arg) {
      autoUpdater.autoDownload = true
    }
    autoUpdater.checkForUpdates()
  })
}
//给渲染进程发送消息
function sendUpdateMessage(text) {
  mainWindow.webContents.send('UpdateMessage', text)
}
